package com.demo.java.OD601_650.OD601;

import java.util.Scanner;
import java.util.Stack;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大括号深度(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146588937
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();  // 读取字符串输入

        // 空字符串的情况
        if (s.equals("")) {
            System.out.println(0);  // 输出0
            return;
        }

        // 用栈来存放每一个字符
        Stack<Character> char_stack = new Stack<>();
        int i = 0;
        int max = 0;  // 用来记录最大深度

        // 遍历字符串
        for (i = 0; i < s.length(); i++) {
            char c = s.charAt(i);  // 获取当前字符

            // 如果是左括号，入栈
            if (c == '(' || c == '{' || c == '[') {
                char_stack.push(c);
                max = Math.max(max, char_stack.size());  // 更新最大深度
            } else {
                // 如果栈为空，说明不匹配
                if (char_stack.size() == 0) {
                    break;
                }

                // 判断右括号与栈顶左括号是否匹配
                if (c == ')') {
                    if (char_stack.pop() == '(') {
                        continue;
                    }
                } else if (c == ']') {
                    if (char_stack.pop() == '[') {
                        continue;
                    }
                } else {
                    if (char_stack.pop() == '{') {
                        continue;
                    }
                }
                break;
            }
        }

        // 如果遍历结束，栈为空，说明括号匹配成功，输出最大深度
        if (i == s.length() && char_stack.size() == 0) {
            System.out.println(max);
        } else {
            System.out.println(0);  // 否则输出0
        }
    }
}